// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
//package com.x52im.rainbowchat.im.concurrent;
//
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
//
///**
// * 群头像生成器的异步并发实现类.
// * 
// * <p>
// * 因群头像的生成（拼合）涉及磁盘IO的读写，因而在用户量较大、并发较多的情况下
// * 很容易出现性能瓶颈，为了解决这个问题因而使用了线程池来提升性能.
// * <p>
// * 优化建议：因群头像的生成涉及到磁般慢IO的操作，高并发情况下必然影响性能，建议
// * 在用户量较大的情况下将群头像生成等拆分到独立的http服务中，从而不至于影响主业
// * 务服务器的性能.
// * 
// * @author Jack Jiang(http://www.52im.net/space-uid-1.html)
// * @since 4.3
// */
//public class GroupAvatarCreatorConcurrentExecutor
//{
//	private static GroupAvatarCreatorConcurrentExecutor instance = null;
//	
//	private ExecutorService pool = null;
//	
//	public static GroupAvatarCreatorConcurrentExecutor getInstance()
//	{
//		if(instance == null)
//			instance = new GroupAvatarCreatorConcurrentExecutor();
//		return instance;
//	}
//	
//	private GroupAvatarCreatorConcurrentExecutor()
//	{
//		initPool();
//	}
//	
//	private void initPool()
//	{
//		// 创建一个可重用固定线程数的线程池：
//		// 目前给定的最大数目是5线程，可以RainbowChat运维过程中根据综
//		// 合性能和压力情况调整此值以便达到最优状态
//        pool = Executors.newFixedThreadPool(5);
//	}
//	
//	public void execute(Runnable r)
//	{
//		pool.execute(r);
//	}
//	
//	public void shutdown()
//	{
//		pool.shutdown();
//	}
//
//}
